#ifndef __PLAYER_H__
#define __PLAYER_H__

#include "Character.h"
#include "Class.h"
#include <string>
#include <vector>

#include "Class.h"

#include "Player_Config.h"


/**
 *  @file
 *  Class "Player"
 */

#define PLAYER_ITOABUFFER_SIZE		5

/**
 * class Player
 * Save a Load Character info
 * Generates a Player
 * Player actions: rest
 * TODO: load equipment
 */
class Player : public Character
{
public:
	Player();
	~Player();
	void		Load(std::string strFileName, std::vector<Class*> classes);
	void		Save(std::string strFileName);
	void		levelUp();
	void		Rest();
	void		generate(std::vector<Class*> classes, std::vector<Item*> items, int iXPforLvlOne);
	void		print();
	void		setAttributes(int iStr, int iRfx, int iInt, int Psy, int iCha);

private:
	int				m_iStrength;		//!< Strength attribute
	int				m_iReflexes;		//!< Reflexes attribute
	int				m_iIntelligence;	//!< Intelligence attribute
	int				m_iPsychic;			//!< Psychic attribute
	int				m_iCharisma;		//!< Charisma attribute
	Class*			m_class;			//!< What classes the player is

	void			printBaseChar();
	void			printClasses(std::vector<Class*> classes);
	void			setClass(std::vector<Class*> classes, std::string strClassName);
	void			selectClass(std::vector<Class*> classes);
	void			setInitialEquipment(std::vector<Item*> items);
	void			applyClass();
	void			rollStats();
	void			newName();
	void			statAdjustments();
	void			statAdjustmentsForStr();
	void			statAdjustmentsForRfx();
	void			statAdjustmentsForInt();
	void			statAdjustmentsForPsy();
	void			statAdjustmentsForCha();

};


#endif // __PLAYER_H__